// 给属性添加get和set 函数 实现数据监听
function defineReactive(obj, key, val) {
  // 如果属性值还是对象递归遍历
  Observer(val);
  // 给属性添加函数
  Object.defineProperty(obj, key, {
    get: function() {
      return val;
    },
    set: function(newVal) {
      val = newVal;
      console.log('属性已经被监听:' + val);
    }
  })
}

// 创建Observer 遍历对象的属性
function Observer(obj) {
  if (!obj || typeof obj !== 'object') {
    return obj;
  }
  // 遍历属性值
  for (const key of Object.keys(obj)) {
    defineReactive(obj, key, obj[key]);
  }
  // Object.keys(obj).forEach(function(key) {
  //   defineReactive(obj, key, obj[key]);
  // });
}

const obj = {
  book1: {
    name: 'wzy1'
  },
  book2: 'wzy2'
};

Observer(obj);
console.log(obj);
obj.book1.name = 'wzy1111';
obj.book2 = 'wwwwwww';
